﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Campus.Entities;
using CampusSite.Models;
using CampusSite.ViewModels;
using System.Web.Security;
using CampusSite.Security;
namespace CampusSite.Controllers
{
    [RolActionFilter]
    //[RoleAuthorize(Constantes.RolAdministrador)]
    public class HomeController : Controller
    {
        private readonly IEstudianteRepository estudianteRepository;
        private readonly IUserRepository userRepository;
        public HomeController()
            : this(new EstudianteRepository(), new UserRepository() )
        { }

        public HomeController(IEstudianteRepository estudianteRepository, IUserRepository userRepository)
        {
            this.estudianteRepository = estudianteRepository;
            this.userRepository = userRepository;
        }

        
        [AllowAnonymous]
        [OutputCache(Location = System.Web.UI.OutputCacheLocation.None)]
        public ActionResult Inicio()
        {
            //return Redirect("/WebHTML/Index.html");
            return Redirect("/Convocatoria/Lista");

            //return Redirect("/WEBHTML/ListadeBuenaFe2015.html");
        }

        public void IntentarCambiarNombre(Automovil auto)
        {
            auto.Nombre = "Cambiar Nombre";
        }

        public class Automovil
        { 
            public string Nombre { get; set; }

            public Automovil(string nombre) 
            {
                Nombre = nombre;
            }           
        }


        [OutputCache(Location = System.Web.UI.OutputCacheLocation.None)]
        public ActionResult Index(string Mensaje, int? TipoMensaje)
        {
            #if DEBUG

            Estudiante est = estudianteRepository.All.First();
            
            #endif

            if (User != null && User.Identity.IsAuthenticated)
            {
                var user = userRepository.FindByName(User.Identity.Name);

                if ( user!= null && user.Rol == Constantes.RolResponsable)
                {
                    return RedirectToAction("../Account/Inscripcion");

                }
                else if (user != null &&  user.Rol == Constantes.RolAdministrador)
                {
                    MensajeVM miMensaje = new MensajeVM(Mensaje, TipoMensaje);

                    ViewBag.ActiveMenu = "Home";
                    ViewBag.Cumpleanios = estudianteRepository.GetCumpleanios(DateTime.Now, 14).ToList();//.Select(e=> new {Nombre = e.Nombre + " " + e.Apellido, Fecha=e.FechaNacimiento}).ToList();
                    //ViewBag.Deudores = estudianteRepository.AllEstudiantesByGroups(new List<int>(){-1}, true).Where(e=> e.TotalAdeudado > 0).ToList();
                    DateTime fechaMenosUnMes = DateTime.Today.AddDays(-30D);

                    ViewBag.Usuarios = userRepository.AllIncluding()
                                       .Where(u => u.FechaCreacion > fechaMenosUnMes).OrderBy(u=> u.UserName).ToList(); 
 
                    return View(miMensaje);
                }
                else
                    return RedirectToAction("../Account/LogOn");
            }
            else
                return RedirectToAction("../Account/LogOn");
        }

        public ActionResult About()
        {
            return View();
        }

        public ActionResult QuickSearch(string term)
        {
            var estudiantes = estudianteRepository.GetEstudiantesByName(term).Select(e => new{id= e.EstudianteId, label=(e.Nombre + " " + e.Apellido)});
            return Json(estudiantes, JsonRequestBehavior.AllowGet);
        }

        private void FindPagosPendientes()
        {
            PagoAnualRepository par = new PagoAnualRepository();
            IPagoMensualRepository pmr = new PagoMensualRepository();
            int mesActual = DateTime.Now.Month;
            int anioActual = DateTime.Now.Year;
            var estudiantesAlDiaMes = pmr.All.Where(pm => pm.Mes == mesActual).Select(pm => pm.EstudianteId);
            var estudiantesAlDiaAnio = par.All.Where(pm => pm.Anio == anioActual).Select(pm => pm.EstudianteId);

            var pendientes = from pm in pmr.All
                             where !(estudiantesAlDiaMes).Contains(pm.EstudianteId) || !(estudiantesAlDiaAnio).Contains(pm.EstudianteId)                             
                             select new { pm.EstudianteId, pm.FechaDePago, pm.Estudiante.Responsable.Telefono, pm.Estudiante.Responsable.Celular, pm.Estudiante.TotalAdeudado };

            //nombre, actividad, fecha ultimo pago, tel
            //foreach (int estudianteId in pendientes)
            //{
            //    estudianteRepository.GetDeudaEstudiante(estudianteId, null);
            
            //}


        }
    
    }
}
